[re:Invent 2019] EC2 Image Builder で S3 からコンテンツをデプロイしてみた #reinvent
こんにちは、コンサル部の望月です。
先程、Image Builder のコンポーネントを作成してみたというブログを書きました。
[re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent
引き続き、Image Builder を触ってみているところ、以下ドキュメントでサポートされているアクションモジュールで S3Download モジュールがあったため、S3 にコンテンツ配置して、デプロイできるんじゃね?と思ったのでやってみました。
Supported Action Modules - Amazon Elastic Compute Cloud Image Builder
やってみた
S3 バケットにコンテンツの配置
自分の S3 バケットにコンテンツの配置をします。
ここでは <バケット名>/contents/
配下に index.html などを配置しています。
コンポーネントのバージョンアップ
初期の作成は、最初に紹介した私のブログを参照してください。
ここでは、せっかくなので作成済みのコンポーネントのバージョンアップを行ってみます。
- 作成済みの『ApacheInstall』を選択し、Actions から『Create new version』をクリック
- Component version には任意のバージョンをつける
- 前回『1.0.0』としていたので、今回は『1.0.1』を記入
- Definition document に実行させたいコンテンツを記入する
- 以下に実行したコンテンツになります
- build
- OSの最新化
- Apache のインストール、有効化
- コンテンツの配置
- <バケット名> は自分の環境に合わせてください。
- validate
- パッケージがインストールされたかの確認
- コンテンツが配置されたかの確認
- test
- 80 番ポートへ接続し、HTTPステータスコードが 200 を返すことを確認
- build
- 以下に実行したコンテンツになります
name: Contents Deploy description: This is Contents Deploy testing document. schemaVersion: 1.0 phases: - name: build steps: - name: InstallLinuxUpdate action: UpdateOS - name: InstallApache action: ExecuteBash inputs: commands: - sudo yum install httpd -y - sudo systemctl enable httpd - sudo systemctl start httpd - name: ContentsDeploy action: S3Download maxAttempts: 3 inputs: - source: s3://<バケット名>/contents/* destination: /var/www/html/ - name: validate steps: - name: CheckApacheandContents action: ExecuteBash inputs: commands: - rpm -qi httpd - ls /var/www/html/*html - name: test steps: - name: TestContents action: ExecuteBash inputs: commands: - HTTP_STATUS=`curl -I localhost -o /dev/null -w '%{http_code}\n' -s`; if [ $HTTP_STATUS -eq 200 ]; then echo $?; else echo $?; fi
- 保存し、バージョン『1.0.1』のコンポーネントが追加されたことを確認します
IAMロールへ S3 へのアクセス権限を追加
また、Image Builderの実行に割り当てているIAMロールの権限にS3からコンテンツをダウンロードするため『AmazonS3ReadOnlyAccess』を追加する必要があります。
イメージパイプラインの作成
イメージパイプラインの作成時に先程バージョンアップしたコンポーネントを指定します
- イメージパイプライン内の Build components から 『Browse Build components』をクリック
- Select build components から検索条件を『Created by me』に変更し、それぞれのバージョンが表示されるため、バージョン『1.0.1』を選択
- イメージパイプラインを作成したら『Run pipeline』を選択し、パイプラインを実行します
AMI の確認
EC2 サービスページから AMI が作成されていることを確認します。
- AMI を確認し、起動する
- 起動したインスタンスへアクセスし、デプロイしたコンテンツのページが表示されることを確認します
まとめ
EC2 Image Builder を使ってコンテンツのデプロイを行うことができました。
コンテンツの更新が少ないサイトで OS アップデートとコンテンツの更新が同じサイクルで変更できる場合などには、こちらの方法を使うことができそうです。
また、触ってて、Image Builder では複数のコンポーネントをひとつのイメージパイプラインで動かすことが可能っぽいので、今回の場合はコンテンツの更新と Apache のインストールを分けた形でコンポーネントを作成するのがよいかもしれません。
ひとつのイメージパイプラインで複数のコンポーネントを動かす方法などは、引き続き触っていきたいと思います。